using System.Text.Json.Serialization;

namespace dotnet_ef_admin.Src.Services;

/// <summary>
///     授权服务接口。
/// </summary>
public interface IAuthService {
    /// <summary>
    ///     异步登录。
    /// </summary>
    /// <param name="request">登录请求。</param>
    /// <returns>登录结果。</returns>
    Task<LoginResult?> LoginAsync(LoginRequest request);

    /// <summary>
    ///     异步登出。
    /// </summary>
    /// <param name="token">令牌。</param>
    /// <returns>登出结果。</returns>
    Task<LogoutResult> LogoutAsync(string token);
}

/// <summary>
///     登录请求。
/// </summary>
public class LoginRequest {
    /// <summary>
    ///     用户名。
    /// </summary>
    public required string Username { get; set; }

    /// <summary>
    ///     密码。
    /// </summary>
    public required string Password { get; set; }
}

/// <summary>
///     登录结果模型。
/// </summary>
public class LoginResult {
    /// <summary>
    ///     访问令牌。
    /// </summary>
    public string AccessToken { get; set; } = "";

    /// <summary>
    ///     令牌类型。
    /// </summary>
    public string TokenType { get; set; } = "Bearer";

    /// <summary>
    ///     刷新令牌。
    /// </summary>
    public string RefreshToken { get; set; } = "";

    /// <summary>
    ///     过期时间。
    /// </summary>
    public object Expires { get; set; } = "";
}

/// <summary>
///     注销结果模型。
/// </summary>
public class LogoutResult {
    /// <summary>
    ///     操作是否成功。
    /// </summary>
    public bool IsSuccess { get; set; }
    /// <summary>
    ///     消息。
    /// </summary>
    public required string Message { get; set; }
}
